package com.feri.fc.task;

import com.feri.fc.config.ThreadPoolConfig;
import com.feri.fc.dao.PhysicianOrderDao;
import com.feri.fc.entity.PhysicianOrder;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 指尖造梦，精益求精！
 *
 * @Author：Feri
 * @Date：2024/12/3 15:43
 * @Modified：
 */
@Component
@RequiredArgsConstructor
@Slf4j
public class OrderTask {
    private final ThreadPoolExecutor executor;
    private final PhysicianOrderDao dao;
    int index=0;
    /**
     * 每周一 凌晨3点执行
     * 对陪诊师的收入进行分账
     * 任务调度
     * 线程池*/
    @Scheduled(cron = "0 0 3 ? * 1")
    public void excuteBill(){
        //1.查询需要分账的陪诊订单
        List<PhysicianOrder> list=dao.selectList(null);
        //2.分片 计算需要的任务数量  每个任务处理100条
        // 520条 6个任务
        //1 0-99 2 100-199 3 200-299 ……
        int num=list.size()/100;
        int partSize=list.size()%100==0? num:num+1;

        //循环分配
        for (int i = 0; i < partSize; i++) {
            index=i*100;
            executor.execute(()->{
                //每个任务 需要执行的范围
                list.subList(index,index+100);
                //实现功能的代码
                //根据陪诊师 签约的佣金抽成 计算
            });
            index=0;
        }
    }
}
